package study.mybatis.multi.datasource.support.transaction;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

/*
 * 多 TransactionManager 时
 * 1.使用 @Transactional 注解事务方法时，如果没有显示指定 transactionManager，
 *   启动时异常 NoUniqueBeanDefinitionException，两种解决方式：
 *   （1）给 @Transactional 指定 transactionManager
 *   （2）使用 @Primary 标记默认的 TransactionManager
 */
//@EnableTransactionManagement
//@Configuration
public class TransactionConfig {

    @Primary
    @Bean("userTransactionManager")
    public PlatformTransactionManager userTransactionManager(@Qualifier("userDataSource") DataSource ds) {
        return new DataSourceTransactionManager(ds);
    }

    @Bean("accountTransactionManager")
    public PlatformTransactionManager accountTransactionManager(@Qualifier("accountDataSource") DataSource ds) {
        return new DataSourceTransactionManager(ds);
    }
}
